package com.le.tester.book.effectivejava3.focus2;

/**
 * createTime：2025-06-11 14:23
 * description：使用Builder模式
 */
public class NutritionFacts {

    public final int fat;

    public final int sodium;

    public final int carbohydrate;

    public static class Builder {

        public Builder() {
        }

        public int fat = 0;

        public int sodium = 0;

        public int carbohydrate = 0;

//        错误1:不是构造方法
//        public Builder(int fat) {
//            this.fat = fat;
//        }
//
//        public Builder(int sodium) {
//            this.sodium = sodium;
//        }
//
//        public Builder(int carbohydrate) {
//            this.carbohydrate = carbohydrate;
//        }
//错误2：不要声明成相同的名称，此处不是构造函数，而不是普通的类方法
//        public Builder fat(int fat) {
//            fat = fat;
//            return this;
//        }
//
//        public Builder sodium(int sodium) {
//            sodium = sodium;
//            return this;
//        }
//
//        public Builder carbohydrate(int carbohydrate) {
//            carbohydrate = carbohydrate;
//            return this;
//        }

        public Builder fat(int val) {
            fat = val;
            return this;
        }

        public Builder sodium(int val) {
            sodium = val;
            return this;
        }

        public Builder carbohydrate(int val) {
            carbohydrate = val;
            return this;
        }

        //        错误4：在链式调用的时候，build是不需要传参的，而且是静态内部类Builder使用的，当然应该声明在Builder的内部
        public NutritionFacts build() {
//            肯定不是默认的构造函数，是可选传参的构造函数，所以请构造主类的构造函数,并且和Builder相关联
            return new NutritionFacts(this);
        }
//
//        public NutritionFacts build(Builder builder) {
//            fat = builder.fat;
//        }
    }

    public NutritionFacts(Builder builder) {
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }

    public int getFat() {
        return fat;
    }

    public int getSodium() {
        return sodium;
    }

    public int getCarbohydrate() {
        return carbohydrate;
    }


}
